iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
自我挑戰組

轉職未滿一年的點點滴滴系列 第 26

[Day 26] - 『轉職工作的Lessons learned』 - Cube.js(II)

  • 分享至 

  • xImage
  •  

今天講一下Cube.js在後端是如何設定與資料庫連線,以及如何在後端啟動Cube.js Server。Cube.js支援多樣的資料庫連線,比方說Postgres, Oracle, MS SQL, MongoDB, ect. 我們公司使用的Db是Postgres,接下來會用它作為範例。

設置

需要將以下內容添加到.env文件中,以連結Postgres資料庫:

CUBEJS_DB_TYPE=postgres                   //DB類型
CUBEJS_DB_HOST=my.postgres.host           //數據庫的主機 URL
CUBEJS_DB_NAME=my_postgres_database       //要連接的數據庫的名稱
CUBEJS_DB_USER=postgres_user              //用於連接數據庫的用戶名
CUBEJS_DB_PASS=**********                 //用於連接數據庫的密碼
CUBEJS_DB_SS=true                         //是否啟用 SSL 加密

有一個很便利的功能是,Cube.j預計新增可以連線多個資料庫的多租戶(Multitenancy)功能(官方宣告預計在10月27日上午 9-10:30舉行研討會),只要連線設定好,就可以同時取用多個資料庫內的資料!可以用以下方式設定,雖然我們沒有有使用到這個功能,但還是想稍微介紹一下,可以這麼使用:

const PostgresDriver = require('@cubejs-backend/postgres-driver');
const AthenaDriver = require('@cubejs-backend/athena-driver');
const BigQueryDriver = require('@cubejs-backend/bigquery-driver');

module.exports = {
  dbType: ({ dataSource } = {}) => {
    if (dataSource === 'web') {
      return 'athena';
    } else if (dataSource === 'googleAnalytics') {
      return 'bigquery';
    } else {
      return 'postgres';
    }
  },
  driverFactory: ({ dataSource } = {}) => {
    if (dataSource === 'web') {
      return new AthenaDriver();
    } else if (dataSource === 'googleAnalytics') {
      return new BigQueryDriver();
    } else if (dataSource === 'financials') {
      return new PostgresDriver({
        database: 'financials',
        host: 'financials-db.acme.com',
        user: process.env.FINANCIALS_DB_USER,
        password: process.env.FINANCIALS_DB_PASS,
      });
    } else {
      return new PostgresDriver();
    }
  },
};

接下來可在後端開啟一個index.js的檔案

const CubejsServer = require('@cubejs-backend/server');

const server = new CubejsServer();

server.listen().then(({ version, port }) => {
  console.log(`? Cube.js server (${version}) is listening on ${port}`);
});

當建立CubejsSverver()函數裡面可以傳入Cofig(設置),在Config裡面可以設置很多配置,可以透過以下方式:

const options = {
    logger: (msg, params) => {
    ...
  },
  checkAuth: async (req, auth) => {
    ...
  },
  ...
}

const server = new Cube.jsServer(options)

可以參考這裡的詳細介紹

有一個比較需要注意的是,Cube.js可搭配Redis使用,但有可能會因為connection pool造成Timeout Error的問題,可以參考這篇


上一篇
[Day 25] - 『轉職工作的Lessons learned』 - Cube.js(I)
下一篇
[Day 27] - 『轉職工作的Lessons learned』 - Cube.js(III)
系列文
轉職未滿一年的點點滴滴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言